博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
freemarker实现分页 jsp实现分页 java内存分页
阅读量:5730 次
发布时间:2019-06-18

本文共 4231 字,大约阅读时间需要 14 分钟。

hot3.png

很多时候我们都会用到分页,模版渲染有的用的是jsp,velocity,freemarker。。。

今天搞了下分页的发现有点烧脑,哈。 首先后台进行分页的时候会直接在sql里面实现,这个都大同小异,这里来说下在内存中分页,先上代码:

java内存分页: 通过传入查询出来的总的list数据,页码页数来得到当页的list数据。

/** * 内存分页,从1开始 * @param list list * @param pageIndex 页码 * @param pageSize 页数 * @param  T * @return T */public static  List pagination(List list, int pageIndex, int pageSize){    final int totalSize = list.size();    pageIndex = pageIndex <= 1 ? 1 : pageIndex;    int startIndex = Math.max((pageIndex - 1) * pageSize, 0);    startIndex = Math.min(startIndex, totalSize);    int endIndex = startIndex + pageSize;    endIndex = Math.min(endIndex, totalSize);    return list.subList(startIndex, endIndex);}

####后台得到数据之后需要由前端渲染得到分页html代码,下面是分别使用freemarker和jsp的实现.

  1. 使用freemarker,可以定义分页宏方便的解决这个问题。
<#macro page pageUrl totalCount pageIndex pageSize>   <#-- 页码为小于1的,恶意翻页的情况直接退出 -->   <#if pageIndex<=0>      <#assign pageIndex=1>   
   <#-- 数量大于总数量,恶意翻页的情况直接退出 -->   <#if ((pageIndex*pageSize-totalCount)>pageSize)>      <#return>   
   <#-- 只有一页的数据就不显示分页了 -->   <#if (totalCount<=pageSize)>      <#return>   
   
      
      <#assign pageCount=(totalCount/pageSize)?ceiling>      <#if (pageIndex>1)>         
  • <<
  •       
          <#if (pageIndex>5)>         <#assign prevPages=pageIndex-9>         <#if prevPages lt 1>            <#assign prevPages=1>         
             <#assign start=pageIndex-4>         
  • ...
  •       <#else>         <#assign start=1>      
          <#-- 显示当前页附近的页-->      <#assign end=pageIndex+4>      <#if (end>pageCount)>         <#assign end=pageCount>      
          <#list start..end as index>         <#if pageIndex==index>            
    ${index?c}         <#elseif index!=0>            
  • ${index?c}
  •          
          
          <#--如果后面页数过多,显示"...":-->      <#if (end lt pageCount)>         <#assign endend=end+4>         <#if (endend>pageCount)>            <#assign endend=pageCount>         
             
  • ...
  •       
          <#-- 显示"下一页":-->      <#if (pageIndex lt pageCount)>         
  • >>
  •       
          
    1. 使用jsp,这里我是直接在java代码里实现的分页插件。
    /**     * 分页工具     * @param pageUrl     * @param pageIndex     * @param pageSize     * @param totalCount     * @return string     */    public static String page(String pageUrl,int pageIndex,int pageSize,long totalCount){        StringBuilder stringBuilder = new StringBuilder("");        if( pageIndex<=0 ){            pageIndex=1;        }        if( (pageIndex*pageSize-totalCount) >pageSize ){            return stringBuilder.toString();  // 恶意翻页        }        if( totalCount<=pageSize ){            return stringBuilder.toString();  //只有一页就不显示了        }        stringBuilder.append("
    "); return stringBuilder.toString(); }

    像这样就可以了,至于传入的url是什么鬼,比如"index.jsp?p="或者"index.jsp?type=XXX&t=XXX&p="

    这里我自己定义的页码参数是p,看自己心情喽。

    总之不管你使用何种方法,这几个参数是需要的:传入的需要拼接的url,页码pageIndex,一页显示多少数据pageSize,  总共多少totalCount.

    转载于:https://my.oschina.net/110NotFound/blog/752944

    你可能感兴趣的文章
    工作中如何做好技术积累
    查看>>
    怎么用sysLinux做U盘双PE+DOS??
    查看>>
    Spring Transactional
    查看>>
    shell脚本实例
    查看>>
    我的友情链接
    查看>>
    Windows Phone 7 隔离存储空间资源管理器
    查看>>
    Oracle树形结构的sql语句
    查看>>
    Microsoft Excel 2000/2003修复工具
    查看>>
    apache安装报错undefined reference ssl
    查看>>
    关于爱情只有一句忠告
    查看>>
    CentOS LVM 新加硬盘,扩容逻辑卷步骤
    查看>>
    CentOS 7下安装部署Oracle11g图文教程
    查看>>
    #51CTO学院四周年# 相约烤鸭”
    查看>>
    四、物理优化(2)索引视图
    查看>>
    分布式日志收集系统实践(视频教程)
    查看>>
    MDT 2013 从入门到精通之SQL Configure And Verify
    查看>>
    Google双因子认证python最好的实现
    查看>>
    案例研究 路由器到路由器EOMPLS---VLAN重写
    查看>>
    WinSrv 2003系统加固教程
    查看>>
    ***第一天
    查看>>